package br.com.imob.dao;

import br.com.imob.modelo.Classificacao;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 11:15:54 31/01/2011 2011
 *  @version 
 */

public class ClassificacaoDao extends GenericDao {
	
	public ClassificacaoDao() {  }
	
	public Integer adicionarClassificacao(Classificacao classificacao) {
		saveOrUpdatePojo(classificacao);
		return classificacao.getClassificacaoId();
	}
	
	public void removerClassificacao(Classificacao classificacao) {
		removerPojo(classificacao);
	}

	/* Precisa definir o ID */
	public void atualizarClassificacao(Classificacao recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	/**
	 * Editar um Classificacao
	 * @param String oldClassificacao
	 * @param String newClassificacao
	 */
	public void atualizarClassificacao(String oldClassificacao, String newClassificacao ) {
		if ( ( !"".equals(oldClassificacao) && oldClassificacao != null )
			&& ( !"".equals(newClassificacao) && newClassificacao != null ) ) 
			atualizarClassificacao( getClassificacaoQNamed(oldClassificacao), new Classificacao(newClassificacao) );
	}
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarClassificacao(Classificacao recuperar, Classificacao alterar) {
		recuperar = retriveClassificacao(recuperar);
		
		if(alterar.getClassificacao() != null)
			recuperar.setClassificacao(alterar.getClassificacao());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Classificacao
	protected Classificacao retriveClassificacao(Classificacao recuperar) {
		if( recuperar.getClassificacaoId() == null )
			return getClassificacaoQNamed( recuperar.getClassificacao() );
		if( recuperar.getClassificacaoId() == null && recuperar.getClassificacao() == null )
			return getClassificacaoQNamed( recuperar.getClassificacaoDsc() );
		else
			return getClassificacao( recuperar.getClassificacaoId() );
	}
	
	
//	Consultas
	public Classificacao getClassificacao(Integer key) {
		return getPojoByID(Classificacao.class, key);
	}
	public Classificacao getClassificacaoByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Classificacao getClassificacaoQNamed(String fltrClassificacao) {
		return getPojoByQNamed("Classificacao.findByClassificacao", fltrClassificacao);
	}
	public Classificacao getClassificacaoQNamedDesc(String fltrDesc) {
		return getPojoByQNamed("Classificacao.findByClassificacaoDsc", fltrDesc);
	}
	
	public List<Classificacao> getClassificacoes() {
		return (List<Classificacao>) getALL(Classificacao.class);
	}
	public List<Classificacao> getClassificacoesQNamedPRX(String fltrClassificacao) {
		return getListByQNamedPRX("Classificacao.findLikeByClassificacao", fltrClassificacao);
	}
	public List<Classificacao> getClassificacoesQNamedDescPRX(String fltrDesc) {
		return getListByQNamedPRX("Classificacao.findLikeByClassificacaoDsc", fltrDesc);
	}
	public List<Classificacao> getClassificacoesByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}